# Bootstrap configuration.

# Copyright (C) 2006-2018 Free Software Foundation, Inc.

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.


# We don't need these modules.
avoided_gnulib_modules='
  --avoid=canonicalize-lgpl
  --avoid=dummy
'

# gnulib modules used by this package.
gnulib_modules="
  $avoided_gnulib_modules
  acl
  alignof
  alloca
  announce-gen
  areadlink-with-size
  argmatch
  argv-iter
  assert
  autobuild
  backupfile
  backup-rename
  base32
  base64
  buffer-lcm
  c-strcase
  c-strtod
  c-strtold
  calloc-gnu
  canon-host
  canonicalize
  chown
  cloexec
  closein
  closeout
  config-h
  configmake
  crypto/md5
  crypto/sha1
  crypto/sha256
  crypto/sha512
  cycle-check
  d-ino
  d-type
  di-set
  diacrit
  dirfd
  dirname
  do-release-commit-and-tag
  dtoastr
  dup2
  environ
  error
  euidaccess
  exclude
  exitfail
  explicit_bzero
  faccessat
  fadvise
  fchdir
  fchmodat
  fchownat
  fclose
  fcntl
  fcntl-safer
  fd-reopen
  fdatasync
  fdl
  fdopen
  fdutimensat
  file-has-acl
  file-type
  fileblocks
  filemode
  filenamecat
  filevercmp
  flexmember
  fnmatch-gnu
  fopen-safer
  fprintftime
  freopen
  freopen-safer
  fseeko
  fstatat
  fsusage
  fsync
  ftoastr
  ftruncate
  fts
  full-read
  full-write
  getgroups
  gethrxtime
  getline
  getloadavg
  getlogin
  getndelim2
  getopt-gnu
  getpagesize
  getpass-gnu
  gettext-h
  gettime
  gettimeofday
  getugroups
  getusershell
  git-version-gen
  gitlog-to-changelog
  gnu-make
  gnu-web-doc-update
  gnumakefile
  gnupload
  group-member
  hard-locale
  hash
  hash-pjw
  heap
  host-os
  human
  idcache
  ignore-value
  inttostr
  inttypes
  isapipe
  isatty
  isblank
  largefile
  lchmod
  lchown
  ldtoastr
  lib-ignore
  linebuffer
  link
  link-follow
  linkat
  long-options
  lstat
  maintainer-makefile
  malloc-gnu
  manywarnings
  mbrlen
  mbrtowc
  mbsalign
  mbschr
  mbslen
  mbswidth
  memcasecmp
  memchr
  memcmp2
  mempcpy
  memrchr
  mgetgroups
  mkancesdirs
  mkdir
  mkdir-p
  mkfifo
  mknod
  mkostemp
  mkstemp
  mktime
  modechange
  mountlist
  mpsort
  netinet_in
  non-recursive-gnulib-prefix-hack
  nproc
  nstrftime
  obstack
  open
  parse-datetime
  pathmax
  perl
  physmem
  pipe-posix
  pipe2
  posix-shell
  posixtm
  posixver
  priv-set
  progname
  propername
  pthread
  putenv
  quote
  quotearg
  randint
  randperm
  read-file
  readlink
  readtokens
  readtokens0
  readutmp
  realloc-gnu
  regex
  remove
  rename
  renameat
  renameatu
  rmdir
  root-dev-ino
  rpmatch
  safe-read
  same
  save-cwd
  savedir
  savewd
  selinux-at
  setenv
  settime
  sig2str
  sigaction
  smack
  ssize_t
  stat-macros
  stat-size
  stat-time
  statat
  stdbool
  stdlib-safer
  stpcpy
  stpncpy
  strdup-posix
  strncat
  strnumcmp
  strsignal
  strtod
  strtoimax
  strtoumax
  symlinkat
  sys_ioctl
  sys_resource
  sys_stat
  sys_wait
  tempname
  termios
  time_rz
  timer-time
  timespec
  tzset
  uname
  unicodeio
  unistd-safer
  unlink-busy
  unlinkat
  unlocked-io
  unsetenv
  update-copyright
  uptime
  useless-if-before-free
  userspec
  utimecmp
  utimens
  vasprintf-posix
  vc-list-files
  verify
  verror
  version-etc-fsf
  wchar-single
  wcswidth
  wcwidth
  winsz-ioctl
  winsz-termios
  write-any-file
  xalloc
  xbinary-io
  xdectoint
  xfts
  xgetcwd
  xgetgroups
  xgethostname
  xmemcoll
  xnanosleep
  xprintf
  xprintf-posix
  xreadlink
  xstrtod
  xstrtoimax
  xstrtol
  xstrtold
  xstrtoumax
  year2038
  yesno
"

# Other locale categories that need message catalogs.
EXTRA_LOCALE_CATEGORIES=LC_TIME

# Additional xgettext options to use.  Use "\\\newline" to break lines.
XGETTEXT_OPTIONS=$XGETTEXT_OPTIONS'\\\
 --flag=asnprintf:3:c-format\\\
 --flag=asprintf:2:c-format\\\
 --flag=error:3:c-format\\\
 --flag=error_at_line:5:c-format\\\
 --flag=vasnprintf:3:c-format\\\
 --flag=vasprintf:2:c-format\\\
 --flag=verror:3:c-format\\\
 --flag=verror_at_line:5:c-format\\\
 --flag=wrapf:1:c-format\\\
 --flag=xasprintf:1:c-format\\\
 --flag=xfprintf:2:c-format\\\
 --flag=xprintf:1:c-format\\\
 --from-code=UTF-8\\\
'

# Append these, since we use the propername module.
see_manual='"This is a proper name. See the gettext manual, section Names."'
see_manual=\'"$see_manual"\'
XGETTEXT_OPTIONS=$XGETTEXT_OPTIONS'\\\
 --keyword=proper_name:1,'"$see_manual"'\\\
 --keyword=proper_name_utf8:1,'"$see_manual"'\\\
'

gnulib_tool_option_extras="--tests-base=gnulib-tests --with-tests --symlink\
 --makefile-name=gnulib.mk
"

# Build prerequisites
buildreq="\
autoconf   2.64
automake   1.11.2
autopoint  0.19.2
bison      -
gettext    0.19.2
git        1.4.4
gperf      -
gzip       -
makeinfo   6.1
patch      -
perl       5.5
rsync      -
tar        -
xz         -
"

bootstrap_post_import_hook ()
{
  # Automake requires that ChangeLog exist.
  touch ChangeLog || return 1
  # List of coreutils programs.  See heading comments in the invoked
  # script for more info.  Keep this in sync with the rules in
  (m4f=m4/cu-progs.m4 mkf=src/cu-progs.mk tmp=cu-progs.tmp \
    && rm -f $m4f $mkf $tmp-1 $tmp-2 \
    && build-aux/gen-lists-of-programs.sh --autoconf >$tmp-1 \
    && build-aux/gen-lists-of-programs.sh --automake >$tmp-2 \
    && chmod a-w $tmp-1 $tmp-2 \
    && mv -f $tmp-1 $m4f && mv -f $tmp-2 $mkf)

  # Massage lib/gnulib.mk before using it later in the bootstrapping process.
  build-aux/prefix-gnulib-mk --lib-name=$gnulib_name lib/$gnulib_mk

  # Regenerate src/single-binary.mk
  (mkf=src/single-binary.mk tmp=single-binary.tmp \
    && rm -f $mkf $tmp \
    && build-aux/gen-single-binary.sh src/local.mk >$tmp \
    && chmod a-w $tmp \
    && mv -f $tmp $mkf)
}


bootstrap_epilogue()
{
  # Since this is a "GNU" package, replace this line
  #   if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null \
  #      | grep -v 'libtool:' >/dev/null; then
  # with this:
  #   if true; then
  # Why?  That pipeline searches all files in $(top_srcdir), and if you
  # happen to have large files (or apparently large sparse files), the
  # first grep may well run out of memory.
  perl -pi -e 's/if LC_ALL=C grep .GNU .PACKAGE.*; then/if true; then/' \
    po/Makefile.in.in

  # Add dummy 'install-html' target, required for packages using
  # non-recursive makefiles with older gettext.
  # See https://debbugs.gnu.org/25690
  if ! grep -w 'install-html' po/Makefile.in.in ; then
    printf 'install-%s:;\n' dvi ps pdf html >> po/Makefile.in.in
  fi

  # Install our git hooks, as long as "cp" accepts the --backup option,
  # so that we can back up any existing files.
  case $(cp --help) in *--backup*) backup=1;; *) backup=0;; esac
  if test $backup = 1; then
    hooks=$(cd scripts/git-hooks && git ls-files)
    for f in $hooks; do
      # If it is identical, skip it.
      cmp scripts/git-hooks/$f .git/hooks/$f > /dev/null \
        && continue
      cp --backup=numbered scripts/git-hooks/$f .git/hooks
      chmod a-w .git/hooks/$f
    done
  fi
}
